/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.util.mvc.objectcast.imp;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import com.asoft.common.util.mvc.objectcast.AbstractCastor;

/**
 * 对象类型转换
 * for
 * created by amon
 */

public class String2Timestamp implements AbstractCastor
{
        static Logger logger = Logger.getLogger(String2Timestamp.class);
        
        public Object casting(Object sro,List objs) throws ClassCastException
        {
                if(sro == null || ((String)sro).length() == 0)
                {
                        if(objs.size() == 0)
                        {
                                throw new ClassCastException("String2Timestamp初始化失败： 配置不正确." +
                                                             "缺少参数<param>${now}<!-- 当前前时刻--></param>");
                        }
                        return new Timestamp((new Date()).getTime());
                }
                else
                {
                        if(objs.size() != 0)
                        {
                                String param = (String)objs.get(0);
                                if(param.equals("${now}"))
                                {
                                        return new Timestamp((new Date()).getTime());
                                }
                                else
                                {
                                        SimpleDateFormat sdf = new SimpleDateFormat(param);
                                        try
                                        {
                                                Date d = sdf.parse((String)sro);
                                                return new Timestamp(d.getTime());
                                        }
                                        catch(ParseException iare)
                                        {
                                                // 格式错误
                                                logger.error("IsTimestamp(" + param + ")异常:" +  iare.toString());
                                                throw new ClassCastException("String2Timestamp(" + param + ")转换失败：" +  iare.toString());
                                        }
                                }
                        }
                        else
                        {
                                try
                                {
                                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                        Date d = sdf.parse((String)sro);
                                        return new Timestamp(d.getTime());
                                }
                                catch(ParseException pe)
                                {
                                        throw new ClassCastException("String2Timestamp转换失败：" + pe.toString());
                                }
                        }
                }
        }
}
